package receiver;

import java.awt.List;
import java.util.ArrayList;

import memento.Memento;
import command.Command;

/**
 * offre les services d'enregistrement et le rejoueur 
 * Cette classe applique le pathern singleton
 * @author camara
 *@version 2
 */
public class Enregistreur {

	/**
	 * etat de l'enregistrement
	 */
	private boolean enMarche;
	
	ArrayList<Command> commandes;
	ArrayList<Memento> mementos;
	
	/**
	 * instance unique de la classe
	 */
	private static Enregistreur  enregistreur;
	

	private Enregistreur(){
		commandes = new ArrayList<>();
		mementos = new ArrayList<>();
	}
	
	public static Enregistreur  getInstance(){
		if (enregistreur == null)
			enregistreur = new Enregistreur();
		return enregistreur;
	}
	
	public boolean isEnMarche() {
		return enMarche;
	}

	public void setEnMarche(boolean enMarche) {
		this.enMarche = enMarche;
	}
	
	public void demarrer(){
		System.out.println("Demarrage d'enregistrement");
		//on renitialise la liste
		commandes.clear();
		mementos.clear();
		enMarche = true;
	}
	public void stoper(){
		System.out.println("Arret d'enregistrement");
		enMarche = false;
		//j'affiche la liste des commande memento
		for ( int i = 0 ; i < commandes.size() ; i++){

			System.out.println(commandes.get(i) + "      "+mementos.get(i));
		}
	}

	public void rejouer() {
		System.out.println("Re-execution des enregistrements");
		//on execute l'ensemeble des commandes de la liste commandes
		for ( int i = 0 ; i < commandes.size() ; i++){
			//on restaure l'etat de la commande i
			commandes.get(i).setMemento(mementos.get(i));
			//puis on execute la commande
			commandes.get(i).rejouer();
		}
	}
	
	public void enregistrer (Command cmd){
		commandes.add(commandes.size(),cmd);
		mementos.add(mementos.size(), cmd.getMemento());
		System.out.println("taille cmd : mem  "+commandes.size()+ "  " +mementos.size()  );
	}
	
}
